package com.hit.eduService.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hit.commonUtils.R;
import com.hit.eduService.entity.EduTeacher;
import com.hit.eduService.entity.TeacherQuery;
import com.hit.eduService.service.EduTeacherService;
import com.hit.serviceBase.exceptionHandler.MyException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.List;

/**
 * <p>
 * 讲师 前端控制器
 * </p>
 *
 * @author testjava
 * @since 2022-10-21
 */
@Api(description = "讲师管理")
@RestController
@CrossOrigin
@RequestMapping("/eduService/teacher")
public class EduTeacherController {
    //在controller中注入service,service可以通过mapper操作数据库
    @Autowired
    private EduTeacherService teacherService;

    //1.查询讲师表所有数据   rest风格
    @ApiOperation(value="讲师管理")
    @GetMapping("findAll")
    public R findAddTeacher(){//统一接口返回
        //调用service层的方法
        List<EduTeacher> ans = teacherService.list(null);
//        try{
//            int j=10/0;//测试全局异常处理
//        }catch (Exception e){
//            throw new MyException(20001,"执行了自定义异常处理");
//        }
        return R.ok().data("items",ans);
    }

    //2.逻辑删除提交   rest风格
    //浏览器不能delete方式提交，所以需要使用postman、swagger,创建公共swagger，使得所有模块都可以使用
    //使用swagger：浏览器访问 http://localhost:8001/swagger-ui.html
    @ApiOperation(value="逻辑删除讲师")
    @DeleteMapping("{id}")//id通过请求传递
    public R removeTeacher(@ApiParam(name="id",value="讲师id",required = true) @PathVariable String id){//统一接口返回
        boolean b = teacherService.removeById(id);
        return b?R.ok():R.error();
    }

    //3.分页查询讲师的方法
    @GetMapping("pageTeacher/{current}/{limit}")//current 当前页   limit 每页记录数
    public R pageListTeacher(@PathVariable long current,@PathVariable long limit){
        //分页需要Page对象
        Page<EduTeacher> page=new Page<>(current,limit);
        //调用Mapper层的方法实现分页
        teacherService.page(page,null);//把分页所有数据封装到page对象中
        long total=page.getTotal();//总记录数
        List<EduTeacher> records=page.getRecords();
        return R.ok().data("total",total).data("rows",records);
        /*Map map=new HashMap();
        map.put("total",total);
        map.put("rows",records);
        return R.ok().data(map);*/
    }

    //4.条件查询带分页方法
    @PostMapping(value = "pageTeacherCondition/{current}/{limit}")
    public R pageTeacherCondition(@PathVariable long current, @PathVariable long limit,
                                  @RequestBody(required = false) TeacherQuery teacherQuery){//接收前端传的查询的筛选条件封装成的对象,
                                // @RequestBody用来接收前端传来的json数据封装到对象中，@ResponseBody返回json数据，需要把@GetMapping改成@PostMapping
                            //因为url请求需要先post筛选的条件 ，required=false说明这个不一定要传条件值
        //分页需要Page对象
        Page<EduTeacher> page=new Page<>(current,limit);
        //调用Mapper层的方法实现带条件查询的分页
        //从teacherQuery对象拿到进行筛选的条件
        String name=teacherQuery.getName();//用来模糊查询的name
        Integer level = teacherQuery.getLevel();
        String begin = teacherQuery.getBegin();
        String end = teacherQuery.getEnd();
        //构建包含条件的wrapper
        QueryWrapper queryWrapper=new QueryWrapper();
        //判断条件值是否为空，如果不为空拼接条件
        if(!StringUtils.isEmpty(name)){
            queryWrapper.like("name",name);//"name"是数据库表的字段名，like进行模糊查询
        }
        if(!StringUtils.isEmpty(level)){
            queryWrapper.eq("level",level);
        }
        if(!StringUtils.isEmpty(begin)){
            queryWrapper.ge("gmt_create",begin);//ge--大于等于
        }
        if(!StringUtils.isEmpty(end)){
            queryWrapper.le("gmt_create",end);//le--小于等于
        }
        //排序
        queryWrapper.orderByDesc("gmt_create");
        teacherService.page(page,queryWrapper);

        long total=page.getTotal();
        List<EduTeacher> records=page.getRecords();
        return R.ok().data("total",total).data("rows",records);
    }

    //5.添加讲师
    @PostMapping("addTeacher")//需要传给后端添加的讲师的信息，所以是post
    public R addTeacher(@RequestBody EduTeacher eduTeacher){
        boolean save = teacherService.save(eduTeacher);
        return save?R.ok():R.error();
    }

    //6.要实现修改讲师，首先需要实现根据id查询讲师
    @GetMapping("getTeacher/{id}")
    public R getTeacher(@PathVariable String id){
        EduTeacher teacher = teacherService.getById(id);
        //teacher不一定存在，可能是null
        return R.ok().data("teacher",teacher);
    }

    //7.修改讲师,根据后端得到的EduTeacher对象的id，把对应id的对象修改为后端得到的对象的样子
    @PostMapping("updateTeacher")//需要从前端得到修改成的样子和修改谁，所以需要post
    public R updateTeacher(@RequestBody EduTeacher eduTeacher){
        boolean b = teacherService.updateById(eduTeacher);
        return b?R.ok():R.error();
    }
}

